In the latter half of the twentieth century, there began a phenomenon known as the information revolution. While the information revolution is a historical development broader in scope than any one event or machine, no single device has come to represent the information revolution more than the digital electronic computer. The development of computer systems has surely been a revolution. Each year, computer systems grow faster, store more data, and provide more applications to their users.
A modern computer system is an enormously complex machine, usually having many sub-parts or subsystems, each of which may be concurrently performing different functions in a cooperative, although partially autonomous, manner. Typically, the system comprises one or more central processing units (CPUs) which form the heart of the system, and which execute instructions contained in computer programs. Instructions and other data required by the programs executed by the CPUs are stored in memory, which often contains many heterogenous components and is hierarchical in design, containing a base memory or main memory and various caches at one or more levels. At another level, data is also stored in mass storage devices such as rotating disk drives, tape drives, and the like, from which it may be retrieved and loaded into memory. The system also includes hardware necessary to communicate with the outside world, such as input/output controllers; I/O devices attached thereto such as keyboards, monitors, printers, and so forth; and external communication devices for communicating with other digital systems.
Each component of a digital computer system is itself a very complex instrument, having a design hierarchy which can mimic that of the system. For example, a disk drive storage device typically contains one or more spinning disks on which data is recorded, an actuator and transducers for accessing data on the disk, a central controller which executes a control program for controlling the operation of the device, motors for driving the spinning disk and the mechanical actuator, various drivers for the motor, actuator and transducer, sense amplification electronics for reading the transducer, internal communications interfaces among the various components, and an external communications interface for communicating data with the outside world. Within any such component, further design hierarchies may exist.
Although a general-purpose computer can be programmed to perform a variety of different tasks, the range of applications and environments in which computer systems and other digital devices will be used creates a demand for devices of differing sizes and configurations. Some computer systems are used primarily as servers, in which multiple users (who may be geographically isolated, using a heterogeneous mixture of computer systems and application software) access a centralized set of applications and common database. Other computer systems are used primarily as single-user devices, in which a single user performs a set of applications of interest to the user, locally stores data of interest to the user, and may optionally communicate with other computers as required to access external data. Still other computer systems may perform specialized functions, such as monitoring and controlling physical sensors, switches, motors, valves, and other controls. A special-purpose digital device may or may not even be considered a computer system, but contains many of the design attributes of a general-purpose computer system.
Many digital system components are implemented on integrated circuit chips. Improvements in the manufacture and design of integrated circuitry have made it possible to place a very large number of active devices, such as transistors, on a single integrated circuit chip. This in turn makes it possible for a single chip to perform complex functions of a digital device. For some years now, it has been possible to implement a complete CPU on a single integrated circuit chip. In recent years, further increases in the number of circuits on a chip have enabled further improvements to the CPU. For example, additional chip capability has been used to increase the number and sizes of on-chip caches, to increase the number of registers, to provide floating point and other numerically intensive hardware processing, etc. In some cases, it has even been possible to implement multiple CPUs on a single integrated circuit chip.
A CPU for a general-purpose computer system has a great range of capability, and can be programmed to perform almost any arbitrary function with respect to data it manipulates. I.e., it can be programmed to produce almost any desired defined data output for a given input. Unfortunately, this capability comes at a cost. The CPU will typically load instructions from an external source, decode the instructions and follow a logical path through the instructions, perform data manipulations as directed, use results of data manipulations to determine future instruction paths, etc. All of these operations take time. Additionally, because the CPU is doing so many things at a time, it typically consumes a relatively large amount of power.
For many functions performed by components of a general-purpose digital computer system or a special-purpose digital device, it is not necessary to have all the capabilities of a typical CPU. These functions can be performed by smaller, special-purpose digital logic circuits which perform only a limited set of functions. Such smaller, special-purpose digital logic circuits often consume less power than a typical CPU, and because they perform a more limited set of functions, often do so faster than a typical CPU. An integrated circuit chip which is designed to perform such specialized functions is often referred to as an “application specific integrated circuit” (ASIC).
Like a general-purpose CPU, an ASIC is a digital logic circuit which will produce a defined output in response to a given input. It uses the same type of logic gates and subcomponents found in a CPU, and is therefore not qualitatively different. It is simply more limited in the variety of functions it can perform. Many ASICs are programmable to alter their functions within some design range, but in general they do not have the flexibility of a general-purpose CPU. Within a general-purpose digital computer system, ASICs are often used as memory device controllers, I/O device controllers, bus controllers, adapters and repeaters, and so forth. In a special-purpose digital device, ASICs may perform additional functions.
One of the challenge of using ASICs is the design effort involved. The design of a single general-purpose CPU is a substantial effort, but once the CPU is designed, it can be programmed to perform almost any arbitrary data function. Where ASICs are used to perform a variety of different functions in different applications, a separate ASIC design exists for each application. Although the design of a single ASIC is no more difficult (and often less so) than that of a general-purpose processor, the number of different applications and consequent number of separate ASIC designs can involve a substantial burden in the design and development of a digital system using ASICs.
In order to reduce the difficulty of designing multiple ASICs performing different functions, ASICs are often designed with re-usable internal sub-components. Typically, much of the logic within an ASIC will duplicate functions which have previously existed in other ASICs, although there will be at least some new function. Using an existing library of internal sub-component designs, a new ASIC design can be created by borrowing the existing designs of common subcomponents and creating only a limited amount of new logic, without having to generate all of the internal logic from scratch.
In any computer system or other digital device, there is a need to provide communications paths, generally called buses, for interconnecting various components of the system. Buses can be used to provide communications among different integrated circuit chips, or among different internal components of a single integrated circuit chip. In the case of an ASIC, it is possible to design special logic circuitry for each desired internal data path within an ASIC, taking into account the characteristics of the sender and receiver, as well as the data being transferred, to optimize the internal data path. However, such special circuitry is likely to be different for each permutation of sender and receiver component module, depending on the requirements of the individual components. Thus, the design of special logic circuitry for communicating among multiple component modules can add significantly to the design effort for the ASIC. On the other hand, it is possible to design a generic interface for communication among different functional components. For example, it is known to use a “central interconnect” module for handling communications among multiple chip components using a generic interface, but fixed generic interfaces are likely to involve greater overhead and be less than optimal.
A bus generally provides a flow control mechanism which prevents data from being sent by a first device when a second device is not ready. For example, a flow control mechanism may be a “not ready” signal that indicates the receiving device is not ready to receive data, a “retry” signal that rejects data transactions the receiver can not accept, or “credits” that indicate a capacity of the receiving device to receive more data.
Many communications paths further provide a mechanism for some transactions to pass others, whereby a transaction which is originally later in time reaches a destination device first. Passing may be permitted to avoid deadlocks, or as a means of giving certain transactions priority for performance optimization. Where passing is permitted, the system defines the conditions under which passing is controlled. One known way in which passing is controlled is by assigning a transaction attribute called a “channel” to transactions, and permitting one transaction to pass another based on their relative channel assignments.
Conventional flow control mechanisms, including control of passing, generally limit flexibility and performance optimization. It would be desirable to provide an improved flow control mechanism, which controls passing in a more flexible and efficient manner. Particularly, it would be desirable to provide a generic architectural design for supporting communications among different functional components of an integrated circuit chip, such as ASIC chip, which provides flow control including passing with greater flexibility and efficiency.